#include	"Pokemon.h"

using namespace	std;
/*
--	Constructor / Destructor
*/
Pokemon::Pokemon()
{
	this->_Exp = 0;
	this->_Number = 0;
	this->_Height = 0.0;
	this->_Weight = 0.0;
	this->_Ability = "";
	this->_Description = "";
	this->_Name = "";
	this->_Species = "";
}
Pokemon::~Pokemon()
{
}

/*
--	Operator
*/
const Pokemon &						Pokemon::operator =(const Pokemon &right)
{
	this->_Number = right._Number;
	this->_Exp = right._Exp;
	this->_Height = right._Height;
	this->_Weight = right._Weight;
	this->_pokeStats = right._pokeStats;
	this->_Ability = right._Ability;
	this->_Description = right._Description;
	this->_Name = right._Name;
	this->_Species = right._Species;
	this->_Ratio = right._Ratio;
	this->_Types = right._Types;
	this->_EggGroup = right._EggGroup;
	this->_Skills = right._Skills;
	this->_Evolutions = right._Evolutions;
	return (*this);
}
/*
--	Accessor
*/
const int							Pokemon::getNumber() const
{
	return (this->_Number);
}
const int							Pokemon::getExp() const
{
	return (this->_Exp);
}
const float							Pokemon::getHeight() const
{
	return (this->_Height);
}
const float							Pokemon::getWeight() const
{
	return (this->_Weight);
}
Stats &								Pokemon::getStats()
{
	return (this->_pokeStats);
}
const string &						Pokemon::getAbility() const
{
	return (this->_Ability);
}
const string &						Pokemon::getDescription() const
{
	return (this->_Description);
}
const string &						Pokemon::getName() const
{
	return (this->_Name);
}
const string &						Pokemon::getSpecies() const
{
	return (this->_Species);
}

const pair<float, float> &			Pokemon::getRatio() const
{
	return (this->_Ratio);
}
const vector<string> &				Pokemon::getTypes() const
{
	return (this->_Types);
}

const vector<string> &				Pokemon::getEggGroup() const
{
	return (this->_EggGroup);
}


const vector<pair<string, int> > &	Pokemon::getSkills() const
{
	return (this->_Skills);
}
const vector<pair<string, int> > &	Pokemon::getEvolutions() const
{
	return (this->_Evolutions);
}
/*
--	Mutator
*/
void								Pokemon::setNumber(const int val)
{
	this->_Number = val;
	return ;
}
void								Pokemon::setExp(const int val)
{
	this->_Exp = val;
	return ;
}
void								Pokemon::setHeight(const float val)
{
	this->_Height = val;
	return ;
}
void								Pokemon::setWeight(const float val)
{
	this->_Weight = val;
	return ;
}
void								Pokemon::setStats(const Stats & val)
{
	this->_pokeStats = val;
	return ;
}
void								Pokemon::setAbility(const string val)
{
	this->_Ability = val;
}
void								Pokemon::setDescription(const string val)
{
	this->_Description = val;
}
void								Pokemon::setName(const std::string val)
{
	this->_Name = val;
	return ;
}
void								Pokemon::setSpecies(const std::string val)
{
	this->_Species = val;
	return ;
}
void								Pokemon::setRatio(const std::pair<float, float> val)
{
	this->_Ratio = val;
	return ;
}
void								Pokemon::setTypes(const std::vector<std::string> val)
{
	this->_Types = val;
	return ;
}
void								Pokemon::addTypes(const std::string val)
{
	this->_Types.insert(this->_Types.end(), val);
	return ;
}
void								Pokemon::setEggGroup(const std::vector<std::string> val)
{
	this->_EggGroup = val;
	return ;
}
void								Pokemon::addEggGroup(const std::string val)
{
	this->_EggGroup.insert(this->_EggGroup.end(), val);
	return ;
}
void								Pokemon::setSkills(const std::vector<std::pair<std::string,int> > val)
{
	this->_Skills = val;
	return ;
}
void								Pokemon::setEvolutions(const std::vector<std::pair<std::string,int> > val)
{
	this->_Evolutions = val;
	return ;
}